package com.ruoyi.staffing.domain;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * HR-候选人(求职登记)主对象 hr_candidate
 */
public class HrCandidate extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 候选人编号
     */
    @Excel(name = "候选人编号")
    private String candidateCode;

    /**
     * 姓名
     */
    @Excel(name = "姓名")
    private String realName;

    /**
     * 性别(0男,1女)
     */
    @Excel(name = "性别")
    private Integer gender;

    /**
     * 身份证号
     */
    @Excel(name = "身份证号")
    private String idNo;

    /**
     * 联系电话(手机)
     */
    @Excel(name = "联系电话")
    private String phone;

    /**
     * 座机/固话
     */
    @Excel(name = "座机")
    private String telephone;

    /**
     * 出生日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "出生日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date birthDate;

    /**
     * 年龄(快照)
     */
    @Excel(name = "年龄")
    private Integer age;

    /**
     * 民族
     */
    @Excel(name = "民族")
    private String nation;

    /**
     * 籍贯
     */
    @Excel(name = "籍贯")
    private String nativePlace;

    /**
     * 户口性质(0城镇,1农村)
     */
    @Excel(name = "户口性质")
    private Integer hukouType;

    /**
     * 户籍地址
     */
    @Excel(name = "户籍地址")
    private String hukouAddress;

    /**
     * 现住地址
     */
    @Excel(name = "现住地址")
    private String currentAddress;

    /**
     * 教育程度
     */
    @Excel(name = "教育程度")
    private String education;

    /**
     * 学位
     */
    @Excel(name = "学位")
    private String degree;

    /**
     * 政治面貌
     */
    @Excel(name = "政治面貌")
    private String politicalStatus;

    /**
     * 婚姻状况(0未婚,1已婚,2其他)
     */
    @Excel(name = "婚姻状况")
    private Integer maritalStatus;

    /**
     * 血型
     */
    @Excel(name = "血型")
    private String bloodType;

    /**
     * 健康状况
     */
    @Excel(name = "健康状况")
    private String healthStatus;

    /**
     * 身高(cm)
     */
    @Excel(name = "身高(cm)")
    private BigDecimal heightCm;

    /**
     * 鞋子尺码
     */
    @Excel(name = "鞋子尺码")
    private String shoeSize;

    /**
     * 体重(kg)
     */
    @Excel(name = "体重(kg)")
    private BigDecimal weightKg;

    /**
     * 工作年限(年)
     */
    @Excel(name = "工作年限")
    private Integer workYears;

    /**
     * 计件/数量程度
     */
    @Excel(name = "计件/数量程度")
    private String pieceLevel;

    /**
     * 打字速度(次/分钟)
     */
    @Excel(name = "打字速度/分钟")
    private Integer typeSpeed;

    /**
     * 个人特长
     */
    @Excel(name = "个人特长")
    private String skill;

    /**
     * 外语语种
     */
    @Excel(name = "外语语种")
    private String language;

    /**
     * 是否有公司亲戚(0否,1是)
     */
    @Excel(name = "是否有亲戚")
    private Integer hasRelative;

    /**
     * 公司亲戚姓名
     */
    @Excel(name = "亲戚姓名")
    private String relativeName;

    /**
     * 与亲戚关系
     */
    @Excel(name = "亲戚关系")
    private String relativeRelation;

    /**
     * 照片URL
     */
    @Excel(name = "照片URL")
    private String photoUrl;

    /**
     * 面试/到岗日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "面试日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date interviewDate;

    /**
     * 招聘渠道
     */
    @Excel(name = "招聘渠道")
    private String jobChannel;

    /**
     * 介绍人
     */
    @Excel(name = "介绍人")
    private String referrerName;

    /**
     * 应聘岗位/岗位意向
     */
    @Excel(name = "应聘岗位")
    private String applyPosition;

    /**
     * 期望薪资
     */
    @Excel(name = "期望薪资")
    private BigDecimal expectSalary;

    /**
     * 住宿意愿(0否,1是)
     */
    @Excel(name = "住宿意愿")
    private Integer accommodationWill;

    /**
     * 工作/现场偏好
     */
    @Excel(name = "工作/现场偏好")
    private String sitePreference;

    /**
     * 班次/倒班偏好
     */
    @Excel(name = "班次/倒班偏好")
    private String shiftPreference;

    /**
     * 是否录用(0否,1是)
     */
    @Excel(name = "是否录用")
    private Integer isHired;

    /**
     * 录用决定时间(到秒)
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "录用决定时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date hireDecisionAt;

    /**
     * 是否外籍(0否,1是)
     */
    @Excel(name = "是否外籍")
    private Integer isForeigner;

    /**
     * 外籍/签证等说明
     */
    @Excel(name = "外籍/签证等说明")
    private String foreignInfo;

    /**
     * 紧急联系人
     */
    @Excel(name = "紧急联系人")
    private String emergencyName;

    /**
     * 与本人关系
     */
    @Excel(name = "与本人关系")
    private String emergencyRelation;

    /**
     * 紧急联系人电话
     */
    @Excel(name = "紧急联系人电话")
    private String emergencyPhone;

    /**
     * 紧急联系人住址
     */
    @Excel(name = "紧急联系人住址")
    private String emergencyAddress;

    /**
     * 开户行
     */
    @Excel(name = "开户行")
    private String bankName;

    /**
     * 户名
     */
    @Excel(name = "户名")
    private String bankAccountName;

    /**
     * 银行账号
     */
    @Excel(name = "银行账号")
    private String bankAccountNo;

    /**
     * 支付宝账号
     */
    @Excel(name = "支付宝账号")
    private String alipayAccount;

    /**
     * 微信号
     */
    @Excel(name = "微信号")
    private String wechatAccount;

    /**
     * 邮箱
     */
    @Excel(name = "邮箱")
    private String email;

    /**
     * 通讯地址
     */
    @Excel(name = "通讯地址")
    private String postalAddress;

    /**
     * 邮政编码
     */
    @Excel(name = "邮政编码")
    private String postalCode;

    /**
     * 状态(0正常 1停用)
     */
    @Excel(name = "状态")
    private String status;

    /**
     * 删除标志(0存在 1删除)
     */
    private String delFlag;

    /**
     * 工作/教育经历集合
     */
    private List<HrCandidateExperience> experiences = new ArrayList<>();

    /**
     * 家庭成员集合
     */
    private List<HrCandidateFamily> families = new ArrayList<>();


    public List<HrCandidateExperience> getExperiences() {
        return experiences;
    }

    public void setExperiences(List<HrCandidateExperience> experiences) {
        this.experiences = experiences;
    }

    public List<HrCandidateFamily> getFamilies() {
        return families;
    }

    public void setFamilies(List<HrCandidateFamily> families) {
        this.families = families;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCandidateCode() {
        return candidateCode;
    }

    public void setCandidateCode(String candidateCode) {
        this.candidateCode = candidateCode;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getIdNo() {
        return idNo;
    }

    public void setIdNo(String idNo) {
        this.idNo = idNo;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getNation() {
        return nation;
    }

    public void setNation(String nation) {
        this.nation = nation;
    }

    public String getNativePlace() {
        return nativePlace;
    }

    public void setNativePlace(String nativePlace) {
        this.nativePlace = nativePlace;
    }

    public Integer getHukouType() {
        return hukouType;
    }

    public void setHukouType(Integer hukouType) {
        this.hukouType = hukouType;
    }

    public String getHukouAddress() {
        return hukouAddress;
    }

    public void setHukouAddress(String hukouAddress) {
        this.hukouAddress = hukouAddress;
    }

    public String getCurrentAddress() {
        return currentAddress;
    }

    public void setCurrentAddress(String currentAddress) {
        this.currentAddress = currentAddress;
    }

    public String getEducation() {
        return education;
    }

    public void setEducation(String education) {
        this.education = education;
    }

    public String getDegree() {
        return degree;
    }

    public void setDegree(String degree) {
        this.degree = degree;
    }

    public String getPoliticalStatus() {
        return politicalStatus;
    }

    public void setPoliticalStatus(String politicalStatus) {
        this.politicalStatus = politicalStatus;
    }

    public Integer getMaritalStatus() {
        return maritalStatus;
    }

    public void setMaritalStatus(Integer maritalStatus) {
        this.maritalStatus = maritalStatus;
    }

    public String getBloodType() {
        return bloodType;
    }

    public void setBloodType(String bloodType) {
        this.bloodType = bloodType;
    }

    public String getHealthStatus() {
        return healthStatus;
    }

    public void setHealthStatus(String healthStatus) {
        this.healthStatus = healthStatus;
    }

    public BigDecimal getHeightCm() {
        return heightCm;
    }

    public void setHeightCm(BigDecimal heightCm) {
        this.heightCm = heightCm;
    }

    public String getShoeSize() {
        return shoeSize;
    }

    public void setShoeSize(String shoeSize) {
        this.shoeSize = shoeSize;
    }

    public BigDecimal getWeightKg() {
        return weightKg;
    }

    public void setWeightKg(BigDecimal weightKg) {
        this.weightKg = weightKg;
    }

    public Integer getWorkYears() {
        return workYears;
    }

    public void setWorkYears(Integer workYears) {
        this.workYears = workYears;
    }

    public String getPieceLevel() {
        return pieceLevel;
    }

    public void setPieceLevel(String pieceLevel) {
        this.pieceLevel = pieceLevel;
    }

    public Integer getTypeSpeed() {
        return typeSpeed;
    }

    public void setTypeSpeed(Integer typeSpeed) {
        this.typeSpeed = typeSpeed;
    }

    public String getSkill() {
        return skill;
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    public Integer getHasRelative() {
        return hasRelative;
    }

    public void setHasRelative(Integer hasRelative) {
        this.hasRelative = hasRelative;
    }

    public String getRelativeName() {
        return relativeName;
    }

    public void setRelativeName(String relativeName) {
        this.relativeName = relativeName;
    }

    public String getRelativeRelation() {
        return relativeRelation;
    }

    public void setRelativeRelation(String relativeRelation) {
        this.relativeRelation = relativeRelation;
    }

    public String getPhotoUrl() {
        return photoUrl;
    }

    public void setPhotoUrl(String photoUrl) {
        this.photoUrl = photoUrl;
    }

    public Date getInterviewDate() {
        return interviewDate;
    }

    public void setInterviewDate(Date interviewDate) {
        this.interviewDate = interviewDate;
    }

    public String getJobChannel() {
        return jobChannel;
    }

    public void setJobChannel(String jobChannel) {
        this.jobChannel = jobChannel;
    }

    public String getReferrerName() {
        return referrerName;
    }

    public void setReferrerName(String referrerName) {
        this.referrerName = referrerName;
    }

    public String getApplyPosition() {
        return applyPosition;
    }

    public void setApplyPosition(String applyPosition) {
        this.applyPosition = applyPosition;
    }

    public BigDecimal getExpectSalary() {
        return expectSalary;
    }

    public void setExpectSalary(BigDecimal expectSalary) {
        this.expectSalary = expectSalary;
    }

    public Integer getAccommodationWill() {
        return accommodationWill;
    }

    public void setAccommodationWill(Integer accommodationWill) {
        this.accommodationWill = accommodationWill;
    }

    public String getSitePreference() {
        return sitePreference;
    }

    public void setSitePreference(String sitePreference) {
        this.sitePreference = sitePreference;
    }

    public String getShiftPreference() {
        return shiftPreference;
    }

    public void setShiftPreference(String shiftPreference) {
        this.shiftPreference = shiftPreference;
    }

    public Integer getIsHired() {
        return isHired;
    }

    public void setIsHired(Integer isHired) {
        this.isHired = isHired;
    }

    public Date getHireDecisionAt() {
        return hireDecisionAt;
    }

    public void setHireDecisionAt(Date hireDecisionAt) {
        this.hireDecisionAt = hireDecisionAt;
    }

    public Integer getIsForeigner() {
        return isForeigner;
    }

    public void setIsForeigner(Integer isForeigner) {
        this.isForeigner = isForeigner;
    }

    public String getForeignInfo() {
        return foreignInfo;
    }

    public void setForeignInfo(String foreignInfo) {
        this.foreignInfo = foreignInfo;
    }

    public String getEmergencyName() {
        return emergencyName;
    }

    public void setEmergencyName(String emergencyName) {
        this.emergencyName = emergencyName;
    }

    public String getEmergencyRelation() {
        return emergencyRelation;
    }

    public void setEmergencyRelation(String emergencyRelation) {
        this.emergencyRelation = emergencyRelation;
    }

    public String getEmergencyPhone() {
        return emergencyPhone;
    }

    public void setEmergencyPhone(String emergencyPhone) {
        this.emergencyPhone = emergencyPhone;
    }

    public String getEmergencyAddress() {
        return emergencyAddress;
    }

    public void setEmergencyAddress(String emergencyAddress) {
        this.emergencyAddress = emergencyAddress;
    }

    public String getBankName() {
        return bankName;
    }

    public void setBankName(String bankName) {
        this.bankName = bankName;
    }

    public String getBankAccountName() {
        return bankAccountName;
    }

    public void setBankAccountName(String bankAccountName) {
        this.bankAccountName = bankAccountName;
    }

    public String getBankAccountNo() {
        return bankAccountNo;
    }

    public void setBankAccountNo(String bankAccountNo) {
        this.bankAccountNo = bankAccountNo;
    }

    public String getAlipayAccount() {
        return alipayAccount;
    }

    public void setAlipayAccount(String alipayAccount) {
        this.alipayAccount = alipayAccount;
    }

    public String getWechatAccount() {
        return wechatAccount;
    }

    public void setWechatAccount(String wechatAccount) {
        this.wechatAccount = wechatAccount;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPostalAddress() {
        return postalAddress;
    }

    public void setPostalAddress(String postalAddress) {
        this.postalAddress = postalAddress;
    }

    public String getPostalCode() {
        return postalCode;
    }

    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDelFlag() {
        return delFlag;
    }

    public void setDelFlag(String delFlag) {
        this.delFlag = delFlag;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", id)
                .append("candidateCode", candidateCode)
                .append("realName", realName)
                .append("gender", gender)
                .append("idNo", idNo)
                .append("phone", phone)
                .append("telephone", telephone)
                .append("birthDate", birthDate)
                .append("age", age)
                .append("nation", nation)
                .append("nativePlace", nativePlace)
                .append("hukouType", hukouType)
                .append("hukouAddress", hukouAddress)
                .append("currentAddress", currentAddress)
                .append("education", education)
                .append("degree", degree)
                .append("politicalStatus", politicalStatus)
                .append("maritalStatus", maritalStatus)
                .append("bloodType", bloodType)
                .append("healthStatus", healthStatus)
                .append("heightCm", heightCm)
                .append("shoeSize", shoeSize)
                .append("weightKg", weightKg)
                .append("workYears", workYears)
                .append("pieceLevel", pieceLevel)
                .append("typeSpeed", typeSpeed)
                .append("skill", skill)
                .append("language", language)
                .append("hasRelative", hasRelative)
                .append("relativeName", relativeName)
                .append("relativeRelation", relativeRelation)
                .append("photoUrl", photoUrl)
                .append("interviewDate", interviewDate)
                .append("jobChannel", jobChannel)
                .append("referrerName", referrerName)
                .append("applyPosition", applyPosition)
                .append("expectSalary", expectSalary)
                .append("accommodationWill", accommodationWill)
                .append("sitePreference", sitePreference)
                .append("shiftPreference", shiftPreference)
                .append("isHired", isHired)
                .append("hireDecisionAt", hireDecisionAt)
                .append("isForeigner", isForeigner)
                .append("foreignInfo", foreignInfo)
                .append("emergencyName", emergencyName)
                .append("emergencyRelation", emergencyRelation)
                .append("emergencyPhone", emergencyPhone)
                .append("emergencyAddress", emergencyAddress)
                .append("bankName", bankName)
                .append("bankAccountName", bankAccountName)
                .append("bankAccountNo", bankAccountNo)
                .append("alipayAccount", alipayAccount)
                .append("wechatAccount", wechatAccount)
                .append("email", email)
                .append("postalAddress", postalAddress)
                .append("postalCode", postalCode)
                .append("status", status)
                .append("remark", getRemark())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("delFlag", delFlag)
                .toString();
    }
}
